#pragma once

#include <rocksdb/db.h>

class ScopeSnapshot {
 public:
  ScopeSnapshot(rocksdb::TransactionDB* txn_db,
                const rocksdb::Snapshot** snapshot)
      : txn_db_(txn_db), snapshot_(snapshot) {
    *snapshot_ = txn_db_->GetSnapshot();
  }
  ~ScopeSnapshot() { txn_db_->ReleaseSnapshot(*snapshot_); }

 private:
  rocksdb::TransactionDB* txn_db_;
  const rocksdb::Snapshot** snapshot_;
  ScopeSnapshot(const ScopeSnapshot&);
  void operator=(const ScopeSnapshot&);
};
